from django.http import HttpResponse
from django.shortcuts import render, redirect
from app01.utils.form import LoginForm
from app01 import models
from app01.utils.code import check_code
from io import BytesIO


def login(request):
    """登录页面"""
    if request.method == 'GET':
        form = LoginForm()
        return render(request, 'login.html', {'form': form})

    form = LoginForm(data=request.POST)
    if form.is_valid():
        # 验证码校验
        user_input_code = form.cleaned_data.pop('code')
        code = request.session.get('image_code', "")
        if code.upper() != user_input_code.upper():
            form.add_error('code', '验证码错误')
            return render(request, 'login.html', {'form': form})
        # 去数据库校验用户名和密码是否正确，并获取用户对象
        admin_object = models.Admin.objects.filter(**form.cleaned_data).first()
        if not admin_object:
            form.add_error('password', '用户名或密码错误')
            return render(request, 'login.html', {'form': form})
        # 登录成功，网站随机生成字符串；
        # 写到用户浏览器的cookie中，下次访问时带上这个cookie，验证通过,再写入session
        request.session['info'] = {'id': admin_object.id, 'name': admin_object.username}
        request.session.set_expiry(60 * 60 * 24 * 7)  # 设置session过期时间为7天
        return redirect('/admin/list/')
    return render(request, 'login.html', {'form': form})


def image_code(request):
    """生成图片验证码"""
    # 调用check_code函数生成图片验证码
    img, code_string = check_code()
    print(code_string)
    # 将验证码字符串保存到session中(用于校验)
    request.session['image_code'] = code_string
    request.session.set_expiry(60)  # 设置session过期时间为60秒
    stream = BytesIO()
    # 将图片保存到内存中，以便返回给客户端
    img.save(stream, 'png')
    # 将内存中的图片返回给客户端
    return HttpResponse(stream.getvalue())


def logout(request):
    """注销"""
    request.session.clear()
    return redirect('/login/')
